package cn.iocoder.yudao.module.product.service.skuofferpricerelation;

import java.util.*;
import javax.validation.*;
import cn.iocoder.yudao.module.product.controller.admin.skuofferpricerelation.vo.*;
import cn.iocoder.yudao.module.product.dal.dataobject.skuofferpricerelation.SkuOfferPriceRelationDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;

/**
 * sku与报价关系 Service 接口
 *
 * @author 芋道源码
 */
public interface SkuOfferPriceRelationService {

    /**
     * 创建sku与报价关系
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createSkuOfferPriceRelation(@Valid SkuOfferPriceRelationSaveReqVO createReqVO);

    /**
     * 更新sku与报价关系
     *
     * @param updateReqVO 更新信息
     */
    void updateSkuOfferPriceRelation(@Valid SkuOfferPriceRelationSaveReqVO updateReqVO);

    /**
     * 删除sku与报价关系
     *
     * @param id 编号
     */
    void deleteSkuOfferPriceRelation(Long id);

    /**
     * 获得sku与报价关系
     *
     * @param id 编号
     * @return sku与报价关系
     */
    SkuOfferPriceRelationDO getSkuOfferPriceRelation(Long id);

    /**
     * 获得sku与报价关系分页
     *
     * @param pageReqVO 分页查询
     * @return sku与报价关系分页
     */
    PageResult<SkuOfferPriceRelationDO> getSkuOfferPriceRelationPage(SkuOfferPriceRelationPageReqVO pageReqVO);


    /**
     * 获得sku与报价关系
     *
     * @param skuId skuId
     * @return sku与报价关系
     */
    SkuOfferPriceRelationDO getSkuOfferPriceRelationBySkuId(Long skuId);

    /**
     * 处理生效商品定价
     *
     * @return: int
     * @author xulimin
     * @date: 2023/12/27 16:54
     */
    int handleEffectiveOfferPrice();

    /**
     * 根据skuId跟新sku与定价关系
     * @param: skuIdList
     * @return: void
     * @author xulimin
     * @date: 2023/12/28 14:56
     */
    void updateSkuOfferPriceRelationByIds(List<Long> skuIdList);

    /**
     *  跟新数据
     * @param: skuOfferPriceRelationDO
     * @return:
     * @author xulimin
     * @date: 2024/1/3 11:23
     */
    void updateSkuOfferPriceRelationById(SkuOfferPriceRelationDO skuOfferPriceRelationDO);

    /**
     * 查询sku统一定价
     * @param: skuId
     * @return: List<SkuOfferPriceRelationDO>
     * @author xulimin
     * @date: 2024/1/3 15:46
     */
    List<SkuOfferPriceRelationRespVO> getSkuOfferPriceRelationListBySkuId(Long skuId);


    /**
     * 新增
     * @param: skuOfferPriceRelationSaveReqVO
     * @author xulimin
     * @date: 2024/1/9 14:51
     */
    void createSkuOfferPrice(SkuOfferPriceRelationSaveReqVO skuOfferPriceRelationSaveReqVO);
}